package top.glkj.hms.service;

import org.springframework.data.domain.Page;
import org.springframework.security.core.context.SecurityContextHolder;
import top.glkj.hms.entity.BaseEntity;
import top.glkj.hms.entity.User;
import top.glkj.hms.utils.Result;
import top.glkj.hms.utils.ResultFactory;
import top.glkj.hms.utils.StaticValue;

import java.util.List;

/**
 * @author : xgl
 * @version : 0.0.1
 * @date :2020/11/10 17:15
 */
public interface BaseService<T extends BaseEntity> {
    /**
     * 修改或者保存
     *
     * @param t T t
     * @return true or false
     */
    public Result save(T t);

    /**
     * 获取所有用户，按分页方式
     *
     * @return List<T>
     */
    public Result getAll();

    /**
     * 获取树形数据
     *
     * @return list
     */


    /**
     * 获取所有用户，按分页方式
     *
     * @param id id
     * @return T t
     */
    public Result getOne(Long id);


    /**
     * 彻底从数据库中删除实体{T}
     *
     * @param t T t
     * @return true or false
     */
    @Deprecated
    public Result delete(T t);

    /**
     * 标记删除
     *
     * @param t T t
     * @return true or false
     */
    public Result remove(T t);

    /**
     * 检查page的值是否符合条件，不符合自动筛选
     *
     * @param page page值
     * @return page
     */
    default int pageValue(int page) {
        if (page < StaticValue.ONE) {
            return StaticValue.ONE;
        }
        return page;
    }

    /**
     * 检查size的值是否符合条件，不符合自动筛选
     *
     * @param size 页面大小
     * @return 页面大小 size
     */
    default int sizeValue(int size) {
        if (size < StaticValue.FIVE) {
            return StaticValue.FIVE;
        } else if (size > StaticValue.HUNDRED) {
            return StaticValue.HUNDRED;
        }
        return size;
    }

    public default Result getNotNullPageResult(Page<T> all) {
        return all.isEmpty() ? ResultFactory.isException(StaticValue.DATA_NOT_FOUND) : ResultFactory.isSuccess(StaticValue.GET_DATA_SUCCESS, all);
    }

    /**
     * 获取当前登录用户信息，用户名，id
     *
     * @return
     */
    public default User getCurrentUser() {
        return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    }

    /**
     *  获取所有
     * @param all list
     * @return result
     */
    public default Result getNotEmptyAll(List<?> all) {
        return all.isEmpty() ? ResultFactory.isException(StaticValue.DATA_NOT_FOUND) : ResultFactory.isSuccess(StaticValue.GET_DATA_SUCCESS, all);
    }


    /**
     * 获取单个非空数据
     * @param t Entity
     * @return result
     */
    public default Result getNotNullEntity(T t){
        if (t == null) {
            return ResultFactory.isError(StaticValue.DATA_NOT_FOUND, null);
        } else {
            return ResultFactory.isSuccess(StaticValue.GET_DATA_SUCCESS, t);
        }
    }
    /**
     * 获取单个非空数据
     * @param baseEntity Entity
     * @return result
     */
    public default Result getNotNullBaseEntity(BaseEntity baseEntity){
        if (baseEntity == null) {
            return ResultFactory.isError(StaticValue.DATA_NOT_FOUND, null);
        } else {
            return ResultFactory.isSuccess(StaticValue.GET_DATA_SUCCESS, baseEntity);
        }
    }
}
